home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / mig / Mig_GetStats.c < prev    next >
C/C++ Source or Header  |  1990-04-27  |  2KB  |  88 lines

  1. /* 
  2.  * Mig_GetStats.c --
  3.  *
  4.  *    Get statistics buffer from the global daemon.
  5.  *
  6.  * Copyright 1990 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  */
  15.  
  16. #ifndef lint
  17. static char rcsid[] = "$Header: /sprite/src/lib/c/mig/RCS/Mig_GetStats.c,v 2.0 90/03/10 13:12:45 douglis Stable Locker: douglis $ SPRITE (Berkeley)";
  18. #endif not lint
  19.  
  20.  
  21. #include <sprite.h>
  22. #include <stdio.h>
  23. #include <mig.h>
  24. #include <errno.h>
  25.  
  26. extern int errno;
  27. extern char *strerror();
  28.  
  29.  
  30. /*
  31.  *----------------------------------------------------------------------
  32.  *
  33.  * Mig_GetStats --
  34.  *
  35.  *    Get the statistics buffer from migd.
  36.  *
  37.  * Results:
  38.  *    0 for success, or -1 on error.
  39.  *
  40.  * Side effects:
  41.  *    The global daemon is contacted if it has not been already.
  42.  *
  43.  *----------------------------------------------------------------------
  44.  */
  45. int
  46. Mig_GetStats(statsPtr)
  47.     Mig_Stats *statsPtr;    /* Pointer to stats buffer */
  48. {
  49.     int status;            /* Status of system calls. */
  50.     int retry;            /* Whether to retry after failed ioctl. */
  51.  
  52.  
  53.     if (mig_GlobalPdev < 0) {
  54.     if (MigOpenPdev(TRUE) < 0) {
  55.         return(-1);
  56.     }
  57.     }
  58.  
  59.     for (retry = 1; retry >= 0; retry--) {
  60.     if (MigSetAlarm() < 0) {
  61.         fprintf(stderr,
  62.             "Error setting alarm for contact with migd.\n");
  63.         return(-1);
  64.     }
  65.     status = Fs_IOControl(mig_GlobalPdev, IOC_MIG_GET_STATS,
  66.                   0, (char *) NULL, sizeof(Mig_Stats),
  67.                   (char *) statsPtr);
  68.     if (MigClearAlarm() < 0) {
  69.         fprintf(stderr,
  70.             "Error clearing alarm for contact with migd.\n");
  71.     }
  72.     if (status != SUCCESS) {
  73.         close(mig_GlobalPdev);
  74.         mig_GlobalPdev = 0;
  75.         if (retry == 0 || MigOpenPdev(TRUE) < 0) {
  76.         fprintf(stderr,
  77.                "Mig_GetStats: error during ioctl to global master: %s\n",
  78.                Stat_GetMsg(status));
  79.         errno = Compat_MapCode(status);
  80.         return(-1);
  81.         }
  82.     } else {
  83.         return(0);
  84.     }
  85.     }
  86.     return(-1);
  87. }
  88.